package com.imyours.webservice.services;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import net.sf.json.JSONObject;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import com.imyours.model.user.UserEntity;
import com.imyours.model.util.HibernateUtil;
import com.imyours.users.session.UserSessionManager;
import com.imyours.webservice.service.Context;
import com.imyours.webservice.service.ContextService;
import com.imyours.webservice.services.annotation.Service;

/**
 * 更新用户信息
 * 
 * @author SLevenc
 * 
 */
@Service(name = "updateUserInfo")
public class UpdateUserInfo extends ContextService {

	public UpdateUserInfo(Context context) {
		super(context);
	}

	public void execute() {
		String sessionId = context.getParameter().get("sessionId");
		if (sessionId != null) {
			UserEntity user = UserSessionManager.getInstance().getUser(sessionId);
			if (user != null) {
				try {
					change(user);
					SessionFactory sf = HibernateUtil.getSessionFactory();
					Session se = sf.openSession();
					Transaction tx = se.beginTransaction();
					se.update(user);
					tx.commit();
					Map<String, Object> resultMap = new HashMap<String, Object>();
					JSONObject jo = JSONObject.fromObject(user);
					jo.remove("id");
					jo.remove("username");
					jo.remove("password");
					resultMap.put("user", jo);
					context.success();
				} catch (Exception ex) {
					context.fail(3, "invalidate Parameter");
				}
			} else {
				context.fail(2, "invalidate sessionId");
			}
		}
	}

	private void change(UserEntity user) {
		if (context.getParameter().containsKey("nickname")) {
			user.setNickname(context.getParameter().get("nickname"));
		}
		if (context.getParameter().containsKey("birthday")) {
			Date bd = null;
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			try {
				bd = sdf.parse(context.getParameter().get("birthday"));
			} catch (Exception ex) {
			}
			if (bd != null) {
				user.setBirthday(bd);
			}
		}
		if (context.getParameter().containsKey("sex")) {
			user.setSex(Byte.parseByte(context.getParameter().get("sex")));
		}
		if (context.getParameter().containsKey("country")) {
			user.setCountry(context.getParameter().get("country"));
		}
		if (context.getParameter().containsKey("province")) {
			user.setProvince(context.getParameter().get("province"));
		}
		if (context.getParameter().containsKey("city")) {
			user.setCity(context.getParameter().get("city"));
		}
		if (context.getParameter().containsKey("zip")) {
			user.setZip(context.getParameter().get("zip"));
		}
		if (context.getParameter().containsKey("mail")) {
			user.setMail(context.getParameter().get("mail"));
		}
		if (context.getParameter().containsKey("address")) {
			user.setAddress(context.getParameter().get("address"));
		}
		if (context.getParameter().containsKey("phone")) {
			user.setPhone(context.getParameter().get("phone"));
		}
		if (context.getParameter().containsKey("qq")) {
			user.setQq(context.getParameter().get("qq"));
		}
		if (context.getParameter().containsKey("realname")) {
			user.setRealname(context.getParameter().get("realname"));
		}
		if (context.getParameter().containsKey("signOfBorn")) {
			user.setSignOfBorn(context.getParameter().get("signOfBorn"));
		}
		if (context.getParameter().containsKey("school")) {
			user.setSchool(context.getParameter().get("school"));
		}
		if (context.getParameter().containsKey("bloodType")) {
			user.setBloodType(context.getParameter().get("bloodType"));
		}
		if (context.getParameter().containsKey("major")) {
			user.setMajor(context.getParameter().get("major"));
		}
		if (context.getParameter().containsKey("constellation")) {
			user.setConstellation(context.getParameter().get("constellation"));
		}
		if (context.getParameter().containsKey("personalWeb")) {
			user.setPersonalWeb(context.getParameter().get("personalWeb"));
		}
		if (context.getParameter().containsKey("userDesc")) {
			user.setUserDesc(context.getParameter().get("userDesc"));
		}
	}
}
